package com.woniuxy.amusementparkos.permission.controller;

import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.woniuxy.amusementparkos.dto.lvd.TableDataDto;
import com.woniuxy.amusementparkos.entity.fzw.Menu;
import com.woniuxy.amusementparkos.entity.fzw.Organization;
import com.woniuxy.amusementparkos.entity.fzw.Role;
import com.woniuxy.amusementparkos.entity.fzw.User;
import com.woniuxy.amusementparkos.permission.Service.UserManagementService;
import com.woniuxy.amusementparkos.util.lzw.result.ResponseResult;

/**
 *后台权限模块中，用户管理模块
 *包括：用户CRUD，修改密码，分配角色，撤销角色
 *
 * @author fzw
 *
 * 2020年4月26日下午7:39:01
 */
@Controller
public class UserManagementController {
	@Autowired
	UserManagementService userManagementService;
/**
 * 获取一页的用户信息
 * 
 * @param page当前页码。layui默认当前页码参数名为page
 * @param limit每页限制多少。layui默认是limit
 * @return
 */
	@RequestMapping("/userMg/getAllUser.do")
	@ResponseBody
	public TableDataDto<User> getAllUser(@Param("page")Integer page,@Param("limit")Integer limit){
		TableDataDto<User> res = new TableDataDto<User>();
		
		try {
			//查询一页用户
			List<User> users=userManagementService.selectAllUserByPageNumber(page,limit);
			//查询总条数
			Long count=userManagementService.selectCount();
			res.setCount(count);
			res.setData(users);
			res.setCode(200);
			res.setMsg("获取用户数据成功");
			return res;
		} catch (Exception e) {
		}
		return res;
	}
	@RequestMapping("/userMg/updateOne")
	@ResponseBody
	public TableDataDto<User> updateUser(User user,@Param("rolestr")String rolestr,@Param("menustr")String menustr){
		// 调用解析方法，解析字符为角色对象和菜单对象
		List<Role> roles = rolesHandler(rolestr);
		List<Menu> menus = menusHandler(menustr);
		//设置用户对象值
		user.setRoles(roles);
		user.setMenus(menus);
		// 创建处理结果的对象
		TableDataDto<User> result = new TableDataDto<>();
		//调用Service处理更新
		try {
			userManagementService.updataUser(user);
		} catch (RuntimeException e) {
			// 设置响应操作码
			result.setCode(4);
			// 设置提示信息
			result.setMsg("修改失败！，请检查提交的数据，或尝试联系管理员");
			// ***************记录日志
			return result;	
		} catch (Exception e) {
			// 设置响应操作码
			result.setCode(4);
			// 设置提示信息
			result.setMsg("系统维护中，请联系管理员");
			return result;
		}
		//没有异常说明更新成功，返回成功状态码
		result.setCode(200);
		result.setMsg("修改成功");
		return result;
	}
	
	@RequestMapping("/userMg/insertUser")
	@ResponseBody
	public ResponseResult<User> insertUser(User user,@Param("rolestr")String rolestr,@Param("menustr")String menustr){
		ResponseResult<User> result = new ResponseResult<User>();
		// 调用解析方法，解析字符为角色对象和菜单对象
		List<Role> roles = rolesHandler(rolestr);
		List<Menu> menus = menusHandler(menustr);
		//设置用户对象值
		user.setRoles(roles);
		user.setMenus(menus);
		//添加用户
		try {
			userManagementService.insertUser(user);
		} catch (RuntimeException e) {
			// 设置响应操作码
			result.setCode(4);
			// 记录添加错误的原因
			result.setMsg(e.getMessage());
			return result;	
		} catch (Exception e) {
			// 设置响应操作码
			result.setCode(4);
			// 设置未知错误信息
			result.setMsg("系统维护中，请联系管理员");
			return result;
		}
		//没有异常说明更新成功，返回成功状态码
		result.setCode(200);
		result.setMsg("修改成功");
		return result;
	}
	/**
	 * 用户批量删除
	 * 前端提交方式：URL参数拼接数组
	 * 后端接收方式：数组参数接收
	 * @return
	 */
	@RequestMapping("/userMg/deleteUsers")
	@ResponseBody
	public ResponseResult<User> deleteUsers(int[] user_ids){
		ResponseResult<User> result = new ResponseResult<User>();
		//用集合存放数组内容，用Mybatis提供的集合方式批量删除用户
		ArrayList<Integer> uids = new ArrayList<Integer>();
		for(int id:user_ids) {
			uids.add(id);
		}
		try {
			userManagementService.deleteUsersByIds(uids);
		} catch (RuntimeException e) {
			// 设置响应操作码
			result.setCode(4);
			// 记录添加错误的原因
			result.setMsg(e.getMessage());
			return result;	
		} catch (Exception e) {
			// 设置响应操作码
			result.setCode(4);
			// 设置未知错误信息
			result.setMsg("系统维护中，请联系管理员");
			return result;
		}
		//没有异常则成功
		result.setCode(200);
		result.setMsg("删除成功！");
		return result;
	}
	//解析JSON字符串转为集合
	private List<Role> rolesHandler(String rolestr) {
		// 创建结果对象
		List<Role> roles = new ArrayList<>();
		// 判断执行条件
		if(rolestr == null||rolestr.equals("")) {
			return roles;
		}
		// 拆分字符串
		String[] strs = rolestr.split(",");
		// 遍历添加赋值
		for (int i = 0; i < strs.length; i++) {
			roles.add(new Role(Integer.parseInt(strs[i]),null,null));
		}
		return roles;
	}
	//解析JSON字符串转为集合
	private List<Menu> menusHandler(String menustr) {
		// 创建结果对象
		List<Menu> menus = new ArrayList<>();
		// 判断执行条件
		if(menustr == null||menustr.equals("")) {
			return menus;
		}
		// 拆分字符串
		String[] strs = menustr.split(",");
		// 遍历添加赋值
		for (int i = 0; i < strs.length; i++) {
			menus.add(new Menu(Integer.parseInt(strs[i]),null,null));
		}
		return menus;
	}
	
}
